#include <iostream>
#include <sys/time.h>
#include <unistd.h>
#include <sys/resource.h>
#include <signal.h>

void handler(int signo)
{
    std::cout << signo << std::endl;
    exit(1);
}

int main()
{
    //资源的限制,导致OS去终止进程,是通过信号去进行终止
    //所以这里我们对所有的信号进行捕捉,来查看效果
    for (int i = 1; i <= 31; ++i)
    {
        signal(i, handler);
    }

    ////限制进程累计运行时长
    //struct rlimit r;

    ////无限制
    //r.rlim_max = RLIM_INFINITY;
    ////限制为2S
    //r.rlim_cur = 2;
    //setrlimit(RLIMIT_CPU, &r);
    
    //限制进程内存使用大小
    struct rlimit r;

    //无限制
    r.rlim_max = RLIM_INFINITY;
    //限制为40M(当然这个是包含了这个进程自己所占用的内存空间的,不仅仅只是你可以申请的空间)
    r.rlim_cur = 1024 * 1024 * 40;
    setrlimit(RLIMIT_AS, &r);

    int count = 0;
    while(1)
    {
        int* p_ret = new int[1024 * 1024];
        std::cout << ++count << std::endl;
        sleep(1);
    }

    return 0;
}


